package com.zenithmind.common.result;

/**
 * 结果构建器接口
 * 遵循开闭原则：对扩展开放，对修改关闭
 * 遵循依赖倒置原则：依赖抽象而非具体实现
 * 
 * @param <T> 数据类型
 */
public interface ResultBuilder<T> {
    
    /**
     * 构建成功结果
     * 
     * @return 成功结果
     */
    Result<T> buildSuccess();
    
    /**
     * 构建成功结果（带数据）
     * 
     * @param data 数据
     * @return 成功结果
     */
    Result<T> buildSuccess(T data);
    
    /**
     * 构建成功结果（自定义消息）
     * 
     * @param message 消息
     * @param data 数据
     * @return 成功结果
     */
    Result<T> buildSuccess(String message, T data);
    
    /**
     * 构建失败结果
     * 
     * @param resultCode 结果码
     * @return 失败结果
     */
    Result<T> buildFail(ResultCode resultCode);
    
    /**
     * 构建失败结果（自定义消息）
     * 
     * @param resultCode 结果码
     * @param message 消息
     * @return 失败结果
     */
    Result<T> buildFail(ResultCode resultCode, String message);
    
    /**
     * 构建失败结果（完全自定义）
     * 
     * @param code 错误码
     * @param message 消息
     * @param data 数据
     * @return 失败结果
     */
    Result<T> buildFail(Integer code, String message, T data);
}
